package org.moyrax.nereyda.services.template
{
	import mx.collections.ArrayCollection;
	
	public interface IMappingController
	{
		/**
		 * Vincula una clase de servicio con un servicio determinado.
		 * Cuando se reciba la respuesta del servidor, automáticamente
		 * se creará una nueva instancia del mismo y será inicializado
		 * con los datos devueltos por el servicio invocado.
		 * 
		 * @param serviceName   Nombre del Servicio.
		 * @param serviceObject Clase de Servicio vinculada.
		 */
		function mapObject( serviceName:String, serviceObject:Class, serviceEvent:Class = null, replaceMap:Boolean = false ):void;
		
		/**
		 * Devuelve la clase vinculada al servicio especificado.
		 * 
		 * @param serviceName   Nombre del Servicio.
		 */
		function getObjects( serviceName:String ):ArrayCollection;

		/**
		 * Elimina el mapeo de un objeto de servicio
		 * al servicio especificado.
		 * 
		 * @param serviceName   Nombre del Servicio.
		 * @param serviceObject Clase de Servicio vinculada.
		 */
		function removeMapping( serviceName:String, serviceObject:Class = null ):void;
		
		/**
		 * Devuelve el evento vinculado al objeto especificado.
		 * 
		 * @param serviceObject Objeto del que se desea obtener el evento.
		 */
		function getObjectEvent ( serviceObject:IServiceObject ):Class;

		/**
		 * Devuelve un valor que indica si el objeto
		 * especificado tiene vinculado un evento.
		 * 
		 * @param serviceObject Objeto que se analizará.
		 */
		function objectHasEvent( serviceObject:IServiceObject ):Boolean;
	}
}